<?php

namespace app\admin\model;

use think\facade\Db;
use think\Model;

/**
 * MedicalStaff模型 - 医务人员
 * @property int $id 医务人员ID
 * @property string $name 姓名
 * @property string $title 职称
 * @property string $specialty 专业特长
 * @property string $phone 联系电话
 * @property string $email 邮箱
 * @property int $status 状态
 * @property string $created_at 创建时间
 * @property string $updated_at 更新时间
 */
class MedicalStaff extends Model
{
    // 表名
    protected $name = 'medical_staff';

    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    


    /**
     * 关联门店（多对多，通过store_medical_staff_relation表）
     */
    public function stores(): \think\model\relation\BelongsToMany
    {
        return $this->belongsToMany(Store::class, 'store_medical_staff_relation', 'store_id', 'medical_staff_id')->where('store.status', 1);
    }


    /**
     * 关联预约记录（一对多）
     */
    public function appointments(): \think\model\relation\HasMany
    {
        return $this->hasMany(Appointment::class, 'medical_staff_id', 'id');
    }

    /**
     * 关联角色（多对多）
     */
    public function roles(): \think\model\relation\BelongsToMany
    {
        return $this->belongsToMany(Role::class, 'medical_staff_role', 'role_id', 'medical_staff_id');
    }

    /**
     * 追加属性：role_names 返回以顿号连接的角色名字符串
     */
    public function getRoleNamesAttr($value, $data)
    {
        $roles = $this->roles;
        if (empty($roles)) {
            return [];
        }
        return $roles->column('name');
    }

    public function getRoleIdsAttr($value, $row): array
    {
        return Db::name('medical_staff_role')
            ->where('medical_staff_id', $row['id'])
            ->column('role_id');
    }
}
